use std::env;
use std::path::PathBuf;

fn main() {
    // 设置输出目录
    let out_dir = env::var("OUT_DIR").unwrap();
    
    // 创建输出目录路径（当前未使用，为未来可能的功能预留）
    let _dest_path = PathBuf::from(&out_dir);
    
    // 为不同平台设置适当的链接属性
    if cfg!(target_os = "macos") {
        // macOS特定链接设置
        println!("cargo:rustc-cdylib-link-arg=-Wl,-install_name,@rpath/libsafe_ffi.dylib");
    } else if cfg!(target_os = "linux") {
        // Linux特定链接设置
        println!("cargo:rustc-cdylib-link-arg=-Wl,-soname,libsafe_ffi.so");
    } else if cfg!(target_os = "windows") {
        // 获取当前 crate 的目录
        let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
        
        // 构建 exokernel.lib 文件的路径
        let lib_path = PathBuf::from(&crate_dir);
        
        // 告诉链接器在这个目录中查找库文件
        println!("cargo:rustc-link-search={}", lib_path.display());
        
        // 告诉链接器链接 exokernel 静态库
        println!("cargo:rustc-link-lib=static=exokernel");
    }
    
    // 重新构建触发器
    println!("cargo:rerun-if-changed=src/lib.rs");
    println!("cargo:rerun-if-changed=src/config.rs");
    println!("cargo:rerun-if-changed=src/callback.rs");
    println!("cargo:rerun-if-changed=src/utils.rs");
    println!("cargo:rerun-if-changed=src/exokernel_interface.rs");
    println!("cargo:rerun-if-changed=build.rs");
    
    // 当exokernel库文件变化时重新构建
    println!("cargo:rerun-if-changed=exokernel.dll");
    println!("cargo:rerun-if-changed=exokernel.lib");
}